package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.ExamManage;
import org.apache.ibatis.annotations.*;

/**
 * 作业控制Mapper层
 */
@Mapper
public interface ExamManageMapper {
//    @Select("select * from exam_manage")
//    List<ExamManage> findAll();

    /**
     * 使用了 @Select 注解标记，表示这是一个查询语句
     * 查询语句简单地从 exam_manage 表中选取所有的记录
     * 返回类型为 IPage<ExamManage>，表示返回的结果是一个分页的作业管理对象列表
     */
    @Select("select * from exam_manage")
    IPage<ExamManage> findAll(Page page);

    /**
     * 使用了 @Select 注解标记，表示这是一个查询语句
     * 查询语句根据给定的考试代码（examCode）从 exam_manage 表中选取对应的记录
     * 参数 examCode 用于指定要查询的考试代码
     * 返回类型为 ExamManage，表示返回的结果是一个作业管理对象
     */
    @Select("select * from exam_manage where examCode = #{examCode}")
    ExamManage findById(Integer examCode);

    /**
     * 使用了 @Delete 注解标记，表示这是一个删除操作
     * 删除操作根据给定的作业代码（examCode）从 exam_manage 表中删除对应的记录
     * 参数 examCode 用于指定要删除的作业代码
     * 返回类型为 int，表示删除操作影响的行数
     */
    @Delete("delete from exam_manage where examCode = #{examCode}")
    int delete(Integer examCode);

    /**
     * 使用了 @Update 注解标记，表示这是一个更新操作
     * 更新操作会根据给定的作业代码（examCode）更新 exam_manage 表中对应的记录
     * 更新的字段包括描述 (description)、来源 (source)、作业ID (paperId)、作业日期 (examDate)、总时长 (totalTime)、年级 (grade)、学期 (term)、专业 (major)、学院 (institute)、总分 (totalScore)、作业类型 (type) 和提示 (tips)
     * 方法的参数为一个 ExamManage 对象，其中包含了待更新的作业管理信息
     */
    @Update("update exam_manage set description = #{description},source = #{source},paperId = #{paperId}," +
            "examDate = #{examDate},totalTime = #{totalTime},grade = #{grade},term = #{term}," +
            "major = #{major},institute = #{institute},totalScore = #{totalScore}," +
            "type = #{type},tips = #{tips} where examCode = #{examCode}")
    int update(ExamManage exammanage);

    /**
     * 使用了 @Options 注解来指定使用自动生成的主键，并将其映射到 examCode 属性
     * 使用了 @Insert 注解标记，表示这是一个插入操作
     * 插入操作会将给定的作业管理信息插入到 exam_manage 表中
     * 插入的字段包括描述 (description)、来源 (source)、试卷ID (paperId)、考试日期 (examDate)、总时长 (totalTime)、年级 (grade)、学期 (term)、专业 (major)、学院 (institute)、总分 (totalScore)、作业类型 (type) 和提示 (tips)
     * 方法的参数为一个 ExamManage 对象，其中包含了待插入的作业管理信息
     */
    @Options(useGeneratedKeys = true,keyProperty = "examCode")
    @Insert("insert into exam_manage(description,source,paperId,examDate,totalTime,grade,term,major,institute,totalScore,type,tips)" +
            " values(#{description},#{source},#{paperId},#{examDate},#{totalTime},#{grade}," +
            "#{term},#{major},#{institute},#{totalScore},#{type},#{tips})")
    int add(ExamManage exammanage);

    /**
     * 查询最后一条记录的paperId,返回给前端达到自增效果
     * @return paperId
     */
    @Select("select paperId from exam_manage order by paperId desc limit 1")
    ExamManage findOnlyPaperId();
}
